home *** CD-ROM | disk | FTP | other *** search
/ Tiger Disk 6 / Tiger_Disk_006_19xx_Tiger-Crew-Disk_de_Side_B.d64 / 8 mk (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  7KB  |  165 lines

  1. 8 clr
  2. 10 u$="[197][197][197][197][197][197][197][197][197][197]":o$="[164][164][164][164][164][164][164][164][164]"
  3. 100 fori=830to900:readx:pokei,x:next
  4. 110 data 169,32,162,0,157,0,128,232,224,40,208,248,96,0,0,0,0,0,0
  5. 114 data 0,169,32,162,39,157,0,128,202,16,250,96,0,0,0,0,0,0,0,0,0
  6. 118 data 169,32,162,40,157,255,127,202,208,250,96,0,0,0,0,0,0,0,0,0
  7. 119 data 169,42,162,40,157,255,127,202,208,250,96
  8. 200 print"[147][164][164]";o$;o$;o$;o$:print"syntax-lehrgang 'maschinensprache' (8)
  9. 210 [153]o$;o$;"toto":[153]"1.3.3. sprungbefehle
  10. 220 print"bei  sprungbefehlen  unterscheidet  man
  11. 230 [153]"bedingte und unbedingte sprungbefehle.
  12. 240 print"a) bedingte  sprungbefehle  sind solche
  13. 250 [153]"sprungbefehle, die nur ausgefuehrt wer-
  14. 260 print"den,  wenn eine bestimmte bedingung er-
  15. 270 [153]"fuellt ist (basic: if .. then goto ..).
  16. 280 print"b) unbedingte  spruenge  werden   immer
  17. 290 [153]"ausgefuehrt (basic: goto 10).
  18. 310 i=1:gosub5000:ifflthen200
  19. 400 print"[147]a) die bedingten sprungbefehle":printu$;u$;u$
  20. 410 print"im  prozessor-statusregister (sr) geben
  21. 420 [153]"vier der flags auskuenfte ueber das er-
  22. 430 print"gebnis der letzten rechenoperation: die
  23. 440 [153]"flags n/z/c/v (negativ/zero/carry/over-
  24. 450 print"flow).fuer jedes dieser vier flags gibt
  25. 460 [153]"es zwei abfragen in form von  bedingten
  26. 470 print"sprungbefehlen:   entweder  sprung  bei
  27. 480 [153]"flag = 0 oder aber sprung bei flag = 1.
  28. 500 print"es gibt daher acht verschiedene sprung-":print"befehle.
  29. 520 i[178]2:[141]5000:[139]fl[167]200
  30. 600 [153]"loadtototo":[153]"bmiwait branch if minus (if n-flag =1)"
  31. 605 [153]"tototo val         valval"
  32. 610 [153]"bplwait branch if plus  (if n-flag =0)
  33. 615 print"    [197]         [197][197]
  34. 620 [153]"'branch' heisst 'verzweigen'. d.h., das
  35. 630 print"programm verzweigt sich  an der stelle,
  36. 640 [153]"wo dieser befehl steht.  ist die abfra-
  37. 650 print"gebedingung erfuellt,so wird der sprung
  38. 660 [153]"ausgefuehrt,sonst nicht. in diesem fall
  39. 670 print"wird das programm  mit dem befehl fort-
  40. 675 [153]"gesetzt, der dem sprungbefehl folgt. im
  41. 680 print"gegensatz zu basic  ist der sprung aber
  42. 690 [153]"relativ adressiert und nicht absolut.
  43. 720 i=3:gosub5000:ifflthen400
  44. 800 print"[147]wir erinnern uns:  das dem sprungbefehl
  45. 810 [153]"folgende byte  gibt an,  wieviele bytes
  46. 820 print"im programm uebersprungen werden sollen":print"es bedeuten:
  47. 850 [153]"bmi $01 sprung nach vorne um 1 byte
  48. 860 print"bmi $00 sprung um 0 byte (also effektiv
  49. 870 [153]"        gar kein sprung!)
  50. 880 print"bmi $ff sprung nach hinten um 1 byte":print"etc.
  51. 930 i[178]4:[141]5000:[139]fl[167]600
  52. 1000 [153]"loadsie brauchen sich nicht zu merken, wel-
  53. 1010 print"chen wert das n-flag haben muss,  damit
  54. 1020 [153]"der sprung erfolgt.merken sie sich nur:
  55. 1030 print"bei bmi  wird bei mi[146][145][157][157][164][164]nus gesprungen, bei
  56. 1040 [153]"bpl bei plwaitoncmdcmdtotous. einfach, nicht wahr ?
  57. 1050 print"zu beachten ist hierbei,  dass die zahl
  58. 1080 [153]"$00 eine positive zahl ist.
  59. 1130 i=5:gosub5000:ifflthen800
  60. 1200 print"[147]meist geht bmi und bpl eine vergleichs-
  61. 1210 [153]"operation wie z.b. cmp voraus. der pro-
  62. 1220 print"zessor vergleicht (= subtrahiert)  zwei
  63. 1230 [153]"datenworte.   entsprechend dem ergebnis
  64. 1240 print"setzt er  das n-flag auf 0 oder 1.  mit
  65. 1250 [153]"bmi/bpl  fragt man ab,  ob die subtrak-
  66. 1260 print"tion ein  positives oder  negatives er-
  67. 1270 [153]"gebnis hatte,  ob also  das erste  oder
  68. 1280 print"das zweite datenwort groesser war.
  69. 1290 [153]"vergleichen sie das mit dem basicbefehl
  70. 1300 print"'if a>b then goto ...' !!
  71. 1320 i[178]6:[141]5000:[139]fl[167]1000
  72. 1400 [153]"loadtototo":[153]"beqwait branch if equal zero (if z-flag=1)
  73. 1405 print"[164][164][164] [197]         [197][197]
  74. 1410 [153]"bnewait branch if not equal zero (if z = 0)
  75. 1415 print"    [197]         [197]   [197]
  76. 1420 [153]"bei beq (bne) erfolgt der sprung,  wenn
  77. 1430 print"die letzte operation  das ergebnis null
  78. 1440 [153]"(ungleich null) hatte.
  79. 1450 print"besonders leicht zu merken ist die kom-
  80. 1455 [153]"bination mit vorangehendem cmp:
  81. 1510 i=7:gosub5000:ifflthen1200
  82. 1600 print"[147]cmp # $1a":print"beq $0f"
  83. 1620 print"bedeutet woertlich vorgelesen: compare
  84. 1630 [153]"accumulator  with byte $1a and if equal
  85. 1640 print"branch $0f bytes.     oder auf deutsch:
  86. 1650 [153]"vergleiche das byte im ac  mit dem byte
  87. 1660 print"$1a und wenn sie  gleich sind,  springe
  88. 1670 [153]"$0f (=15) bytes nach vorne.
  89. 1680 print"die  abkuerzungen  der assemblersprache
  90. 1690 [153]"sind hier besonders einpraegsam.
  91. 1710 i=8:gosub5000:ifflthen1400
  92. 1800 print"[147][164][164][164] [164][164][164]":print"bcc[146]/bcs[146] branch if carry-flag clear/set
  93. 1810 [153]"tototo tototo":[153]"bvcwait/bvswait     ''   overflow-flag   ''
  94. 1820 print"der erste buchstabe (b) bedeutet wieder
  95. 1830 [153]"'branch',  der zweite  (c/v) bezeichnet
  96. 1840 print"das getestete flag und der dritte (c/s)
  97. 1850 [153]"bedeutet 'clear' bzw. 'set'.   oder auf
  98. 1855 print"deutsch:  clear = rueckgesetzt (0)  und
  99. 1860 [153]"set = gesetzt (1).
  100. 1870 print"die befehle bvc/bvs  werden ihnen nicht
  101. 1880 [153]"oft begegnen, beq/bne jedoch sehr oft.
  102. 1910 i=9:gosub5000:ifflthen1600
  103. 2000 print"[147]beispiele:":printu$
  104. 2005 print"zu jedem problem  gibt es meist mehrere
  105. 2010 [153]"loesungsmoeglichkeiten,  die sich durch
  106. 2020 print"details unterscheiden. in den folgenden
  107. 2030 [153]"beispielen zeigen wir ihnen  zum selben
  108. 2040 print"problem verschiedene loesungen mit hin-
  109. 2050 [153]"weisen,wo die unterschiede liegen. ver-
  110. 2055 print"suchen sie diese zu verstehen !":print"hier das problem:
  111. 2070 [153]"loeschen der ersten bildschirmzeile von
  112. 2080 print"dez. 32768-32807 bzw. hex $8000-$8027.
  113. 2110 i[178]10:[141]5000:[139]fl[167]1800
  114. 2200 [153]"load1. moeglichkeit:
  115. 2220 a$="lda #$20     lade ac mit zeichen space":printa$
  116. 2230 print"ldx #$00     zaehler auf null setzen
  117. 2240 [153]"sta $8000,x  ac nach $8000+xr
  118. 2250 print"inx          zaehler um 1 erhoehen
  119. 2260 [153]"cpx #$28     ende erreicht?
  120. 2270 print"bne $f8      schleife
  121. 2280 [153]"zaehler zaehlt von $00 bis $28. schlei-
  122. 2290 print"fenabbruch mit xr=$28. letzte speicher-
  123. 2300 [153]"adresse: $8027. abbruch bei z-flag = 1.
  124. 2310 i=11:gosub5000:ifflthen2000
  125. 2400 print"[147]2. moeglichkeit:":printa$
  126. 2420 print"ldx #$27     zaehler auf $27 setzen
  127. 2430 [153]"sta $8000,x  ac nach $8000+xr
  128. 2440 print"dex          zaehler um 1 erniedrigen
  129. 2460 [153]"bpl $fa      schleife,bis xr minus wird
  130. 2470 print"zaehler zaehlt von $27 bis $ff. schlei-
  131. 2480 [153]"fenabbruch mit xr=$ff. letzte speicher-
  132. 2490 print"adresse: $8000. abbruch bei n-flag = 1.
  133. 2500 [153]"zaehlweise: rueckwaerts.
  134. 2510 i=12:gosub5000:ifflthen2200
  135. 2600 print"[147]3. moeglichkeit:":printa$
  136. 2620 print"ldx #$28     zaehler auf $28 setzen
  137. 2630 [153]"sta $7fff,x  ac nach $7fff+xr
  138. 2640 print"dex          zaehler um 1 erniedrigen
  139. 2660 [153]"bne $fa      schleife,bis xr = $00
  140. 2670 print"zaehler zaehlt von $28 bis $00. schlei-
  141. 2680 [153]"fenabbruch mit xr=$00. letzte speicher-
  142. 2690 print"adresse: $8000. abbruch bei z-flag = 1.
  143. 2700 [153]"zaehlweise: rueckwaerts.
  144. 2710 i=13:gosub5000:ifflthen2400
  145. 2800 print"[147]aufgaben:":printu$
  146. 2805 print"1. loeschen der ersten 5 bildschirmzei-":print"   len.
  147. 2820 [153]"2. erste zeile mit '*' vollschreiben.
  148. 2830 print"3. im  3. beispiel hat das  xr beim ab-
  149. 2840 [153]"   bruch der schleife den wert $00. der
  150. 2850 print"   speicher $7fff + $00 wird aber nicht
  151. 2860 [153]"   mehr angesprochen. warum ?
  152. 2870 print"die beispiele 1-3 finden sie ab 830,850
  153. 2880 [153]"und 870 im ram, aufgabe 2 ab 890.
  154. 2910 print"  - seite 14 -  <+> [145][164][164][164][164][157][157][157][157]ende[146]  <-> von vorne";
  155. 3060 gosub5020:onflgoto0
  156. 3070 print"[147]":fori=0to40:sys890:forw=0to10:nextw:sys830:forw=0to20:nextw:nexti
  157. 3080 end:run
  158. 5000 rem umblaettern
  159. 5010 print"  - seite";i;"-  <+> weiter  <-> zurueck";
  160. 5020 fori=0to11:getx$:next
  161. 5030 getx$:ifx$=""then5030
  162. 5040 ifx$="+"thenfl=0:return
  163. 5050 ifx$="-"thenfl=1:return
  164. 5060 goto5030
  165.